package main

import (
	"fmt"
	"context"
)

func process(ctx context.Context) {
	age, ok := ctx.Value("age").(int)  // 取出的值在使用之前做一下类型断言是比较好的做法
	if !ok {
		age = 18  // 如果有错误，就默认设置成18
	}
	fmt.Println("Age:", age)
	name, _ := ctx.Value("name").(string)  // 忽略错误
	fmt.Println("Name:", name)
	fmt.Println(ctx.Value("gender"))  // ctx不包括也不需要类型断言，但是使用前做一下类型断言比较好
	fmt.Println(ctx.Value("gender1"))  // 如果没有对应的key，就返回nil
}

func main() {
	ctx := context.WithValue(context.Background(), "name", "Adam")
	ctx = context.WithValue(ctx, "age", 23)  // 再追加值，就使用之前的ctx，这样所有的值都有了
	ctx = context.WithValue(ctx, "gender", "Male")
	process(ctx)  // 调用函数，把ctx传进去，函数里可以取出相应的值
}